package com.ruoyi.web.controller.tool.designpattern.structuralPatterns.proxy;

/**
 * TODO
 *
 * @author Hack2003
 * @date 2024/3/20 16:33
 **/
// 抽象主题
interface Subject {
    void request();
}

// 真实主题
class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("真实主题处理请求.");
    }
}

// 代理
class Proxy implements Subject {
    private RealSubject realSubject;

    public Proxy() {
        this.realSubject = new RealSubject();
    }

    @Override
    public void request() {
        // 在这里可以控制对真实主题的访问
        System.out.println("代理加的处理请求.");
        realSubject.request();
    }
}

/**
 * 代理模式通常用于控制对对象的访问，
 * 可以在代理中加入额外的逻辑，如权限控制、缓存、延迟加载等。
 * 代理模式有助于保持代码的清晰性和可维护性。
 */
public class Test {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.request();
    }
}